package com.selftcp;

import java.io.IOException;

// 测试类 - 演示粘包和拆包现象
// 在真实网络中，TCP 数据包最终会被封装成 IP 数据报，通过网卡发送到网络中。而在这个模拟实现中：
// TCPacket类：手动定义了 TCP 数据包的结构（包含序列号、确认号、标志位、数据等核心字段），模拟了 TCP 协议的 “数据包格式”。
// DatagramPacket：将TCPacket序列化后的字节数组封装起来，模拟了 “IP 层封装 TCP 数据” 的过程。
// DatagramSocket：负责发送和接收DatagramPacket，模拟了 “网络硬件（如网卡）传输数据报” 的物理过程。
// 简单来说，UDP 的 API 在这里扮演了 “虚拟网卡” 的角色，让我们无需操作底层硬件，就能在应用层模拟 TCP 协议的工作流程。
public class ServerTest {
    public static void main(String[] args) {
        // 启动服务器
        try {
            TCPServer server = new TCPServer(12345);
            while (true) {
                TCPConnection conn = server.accept();
                System.out.println("Accepted new connection");
                
                // 处理连接 - 直接打印接收到的原始数据，不做任何解析
                new Thread(() -> {
                    try {
                        while (conn.isConnected()) {
                            byte[] data = conn.receive();
                            // 服务器原样返回数据
                            conn.send(data);
                        }
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }).start();
            }
        } catch (IOException e) {
            e.printStackTrace();
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
        }
    }
}
